package controllers

import (
	"net/http"
	"pegasus/services"
	"pegasus/utils"

	"github.com/gorilla/websocket"
)

//Connection Controller 负责websocket 建立长链接
type Connection struct {
	utils.ILogger
}

//Connect 建立链接会验证授权码
func (cn *Connection) Connect(w http.ResponseWriter, r *http.Request, hs *services.HubService, upgrader *websocket.Upgrader, sm services.SessionService) {
	r.ParseForm()
	token := sm.Update(r.Form.Get(utils.Authorization))
	if token == nil {
		w.WriteHeader(http.StatusUnauthorized)
		w.Write([]byte("登录失效"))
		return
	}
	conn, err := upgrader.Upgrade(w, r, nil)
	//有可能此时用户已经退出 但是我们已经创建了链接 链接要求用户除了使用websocket的心跳包以外 必须发带token的心跳包 这样就可以检测已经退出的用户
	if err != nil {
		cn.Warn(err)
		return
	}
	hs.Add(token.Logined().ID(), conn)
}
